/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	IMscbCancelOrderMgr.java
 * 模块说明：	
 * 修改历史：
 * Oct 30, 2007 - lxm - 创建。
 */
package com.hd123.rumba.mscb.order;

import java.util.List;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.domain.IDomain;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.mscb.subscriber.Subscriber;
import com.hd123.rumba.runtime.IManager;
import com.hd123.rumba.runtime.OperateContext;

/**
 * 消息取消订阅单 | 管理员 | 接口类
 * 
 * @author lxm
 * 
 */
public interface IMscbCancelOrderMgr extends IManager {

  /**
   * 创建一个消息取消订阅单。
   * 
   * @param domain
   *          指定所属域。
   * @return 返回创建的消息取消订阅单对象。
   * @throws BusinessException
   */
  public IMscbCancelOrder createOrder(IDomain domain) throws BusinessException;

  /**
   * 保存指定的消息取消订阅单。
   * 
   * @param order
   *          指定被保存的消息取消订阅单。
   * @param operate
   * @throws BusinessException
   * @throws HibernateException
   */
  public void saveOrder(IMscbCancelOrder order, OperateContext operate) throws BusinessException,
      HibernateException;

  /**
   * （标记）删除指定的消息取消订阅单。
   * 
   * @param order
   *          指定被删除的消息取消订阅单。
   * @param operate
   * @throws BusinessException
   * @throws HibernateException
   */
  public void deleteOrder(IMscbCancelOrder order, OperateContext operate) throws BusinessException,
      HibernateException;

  /**
   * 根据uuid取得消息取消订阅单。
   * 
   * @param uuid
   *          指定消息取消订阅单的uuid。
   * @return 返回符合条件的消息取消订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IMscbCancelOrder getOrder(String uuid) throws BusinessException, HibernateException;

  /**
   * 根据uuid取得消息取消订阅单。
   * 
   * @param uuid
   *          指定消息取消订阅单的uuid。
   * @param states
   *          符合条件的消息取消订阅单状态取值列表，只有当状态属于该集合时才会被返回。传入null，表示不约束状态条件。
   * @return 返回符合条件的消息取消订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IMscbCancelOrder getOrder(String uuid, Integer[] states) throws BusinessException,
      HibernateException;

  /**
   * 根据uuid取得有效的消息取消订阅单。即状态不等于“已删除”的。
   * 
   * @param uuid
   *          指定消息取消订阅单的uuid。
   * @return 返回符合条件的消息取消订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IMscbCancelOrder getValidOrder(String uuid) throws BusinessException, HibernateException;

  /**
   * 取得消息订阅单所有相关的消息取消订阅单。
   * 
   * @param cancelledOrder
   *          指定消息订阅单。
   * @return 返回消息取消订阅单列表，若找不到则返回空的列表。
   * @throws BusinessException
   * @throws HibernateException
   */
  public List<IMscbCancelOrder> getOrdersByCancelled(IMscbOrder cancelledOrder)
      throws BusinessException, HibernateException;

  /**
   * 根据业务键查找有效的（为被删除的）消息取消订阅单。
   * 
   * @param cancelledOrder
   *          指定被取消的消息订阅单。
   * @param subscriber
   *          指定订阅者。
   * @return 返回符合条件的消息取消订阅单，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IMscbCancelOrder getValidOrderByKey(IMscbOrder cancelledOrder, Subscriber subscriber)
      throws BusinessException, HibernateException;
}
